
;(function($, window, document, undefined) {
	var aGrade = [],//年级
		aStaff = [],//无职务的教职工
		aClassroom = [],//教室
		aClass = [],//班级
		nClassHour = "",//课时
		aClassGroup = [];//科组	
		
	$.extend({
		//初始化页面
		initPage:function(){
			//获取年级列表
			$.getGradeList();
			
//			//创建年级下拉菜单
//			$.createGradeList(aGrade);
			
			//获取没有职务的老师列表
			$.getStaffList();
			
			//获取科组
			$.getClassGroupList();
			
//			//获取学校课时节次
//			$.getClassHour();
			
//			//非走班，重新定义周和节之间的关系
//			$.noGoClass_node(nClassHour);
			
//			//定义走班节次渲染列表
//			$.goClass_node(nClassHour,$("#goClass_table"));
			
//			//渲染非走班的表格架构（班级）
//			$.noGoClass_createClassTable(aClass,$("#noGoClass_table"));
			
//			//渲染教室的下拉列表
//			$.createClassroomList(aClassroom, $("#classroom"));
			
//			//查询走班课程表，
//			$.goClass_table_show();
			
//			//查询非走班课程表
//			$.noGoClass_table_show();
			
			//监听走班年级切换事件
			$.goClass_grade_event();
			
			//监听教室切换事件
			$.goClass_classroom_event();
			
			//监听非走班年级切换事件
			$.noGoClass_event_grade();
		},
		//获取年级列表
		getGradeList: function() {
			fnAjax.method_4(
				url_join("grade/list"), {},
				"post",
				function(data) {
					console.log(data);
					
					if(data.data.length < 1){
						layer.alert("该学校还没有初始化年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建年级数据！");
					}else{
						aGrade = data.data;
						//创建年级下拉菜单
						$.createGradeList(aGrade);
					}
					
				}
			);
		},
		//创建年级下拉菜单
		createGradeList:function(aGrade){
			$.each(aGrade, function(i, v) {
				if(v.type == 1){
					var sOption = '<option value="' + v.id + '" data-type="' + v.type + '">' + v.name + '</option>';
					$("#goClass_grade").append($(sOption));
				}		
				else{
					var sOption = '<option value="' + v.id + '" data-type="' + v.type + '">' + v.name + '</option>';
					$("#noGoClass_grade").append($(sOption));
				}	
			});
			
			$("#goClass_grade,#noGoClass_grade").find("option:selected").attr("selected", "selected");
//			//获取教室列表(包含行政班和非行政班)
//			$.getClassroomList();
			
//			//获取班级列表
//			$.getClassList();
			
			//获取学校课时节次
			$.getClassHour();
		},
		//监听走班年级切换事件
		goClass_grade_event:function(){
			$("#goClass_grade").on("change",function(){
				//获取教室列表(包含行政班和非行政班)
				$.getClassroomList();
				
//				//查询非走班课程表
//				$.noGoClass_table_show();
			});
		},
		//监听教室切换事件
		goClass_classroom_event:function(){
			$("#classroom").on("change",function(){
				//查询走班课程表，
				$.goClass_table_show();
			});
		},
		//获取没有职务的老师列表
		getStaffList:function(){
			fnAjax.method_4(
				url_join("common/staff/list"), {},
				"post",
				function(data) {
					console.log("教职工列表",data);
					if(data.data.length < 1){
						layer.alert("该学校还没有初始化教职工数据，请到“资料管理》教职工管理” 模块，创建教职工数据！");
					}else{
						aStaff = data.data;
					}
					
				}
			);
		},
		//获取科组
		getClassGroupList: function() {
			fnAjax.method_4(
				url_join("class-group/list"), {},
				"post",
				function(data) {
					console.log("科组列表",data);
					if(data.data.length < 1){
						layer.alert("该学校还没有初始化科组数据，请到“资料管理》学校内部架构管理》科组列表” 模块，创建科组数据！");
					}else{
						aClassGroup = data.data;
					}
					
				}
			);
		},
		//获取教室列表(包含行政班和非行政班)
		getClassroomList: function() {
			if($("#goClass_grade option").length > 0){
				fnAjax.method_4(
					url_join("schedule-v2/room"), {gid:$("#goClass_grade").val()},
					"post",
					function(data) {
						console.log(data);
						if(data.data.length < 1){
							layer.alert("该年级还没有初始化教室数据，请到“资料管理》学校内部架构管理》教室列表” 模块，创建教室数据！");
						}else{
							aClassroom = data.data;
							//渲染教室的下拉列表
							$.createClassroomList(aClassroom, $("#classroom"));
						}
						
						
					}
				);
			}
			else{
				layer.alert("该学校还没有初始化走班制年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建走班制年级数据！")
			}
		},
		
		//渲染教室的下拉列表
		createClassroomList:function(aClassroom,container){
			container.find("option").remove();
			$.each(aClassroom, function(i, v) {
				var sOption = '<option value="' + v.id + '" data-required="'+ (v.required && v.required) +'" data-grade_id="'+ (v.grade_id && v.grade_id) +'" >' + v.name + (v.required ? '(绑定行政班'+ v.class_name +'班)' : '') + '</option>';
				container.append($(sOption));
			});
			
			//查询非走班课程表
			$.noGoClass_table_show();
		},
		//获取班级列表
		getClassList:function(){
			if($("#noGoClass_grade").length > 0){
				//获取班级列表,并渲染行
				fnAjax.method_4(
					url_join("class/list"),
					{grade_id:$("#noGoClass_grade").val()},
					"post",
					function(data) {
						console.log("班级",data.data);
						if(data.data.length < 1){
							layer.alert("该年级还没有初始化班级数据，请到“资料管理》学校内部架构管理》班级列表” 模块，创建班级数据！");
						}else{
							aClass = data.data;
								//渲染非走班的表格架构（班级）
							$.noGoClass_createClassTable(aClass,$("#noGoClass_table"));
						}
					}
				);
			}
			else{
				layer.alert("该学校还没有初始化年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建年级数据！")
			}
		},
		//获取学校课时节次
		getClassHour: function() {
			fnAjax.method_4(
				url_join("schedule-v1/session"), {},
				"post",
				function(data) {
					console.log(data);
					if(data.data < 1){
						layer.alert("该学校还没配置课时的考勤时间，请在系统设置》考勤时间设置》课时设置 ，进行配置");
					}else{
						nClassHour = data.data + 1; 
						//非走班，重新定义周和节之间的关系
						$.noGoClass_node(nClassHour);
						
						//定义走班节次渲染列表
						$.goClass_node(nClassHour,$("#goClass_table"));
					}
				
				}
			);
		},
		
		/**
		 * 定义走班节次渲染列表
		 * @param {Number} n 课时个数
		 * @param {Object} container 走班表格选择器
		 * */
		goClass_node:function(n,container){
			container.find("tbody tr").remove();
			var th_len = container.find("thead th").length;
			var tds = "";
			for(var j=1;j<th_len;j++){
				tds += '<td class="td-goClass">'+						
						'</td>';
			}			
			var trs = "";
			for(var i=0;i<n;i++){
				trs += '<tr class="text-c"><td class="td-node" data-node="'+ (i+1) +'">第'+ (i+1) +'节</td>'+ tds +'</tr>';
			}
			container.find("tbody").html(trs);
			$.goClass_addProp();
		},
		//走班表格主要单元配置节次和星期数据
		goClass_addProp:function(){
			$("#goClass_table .td-goClass").each(function(){
				$(this).attr({
					"data-node":$(this).siblings(".td-node").attr("data-node"),
					"data-day":$("#goClass_table thead th").eq($(this).index()).attr("data-day")
				});
			});
			
			//获取教室列表(包含行政班和非行政班)
			$.getClassroomList();
		},
		//查询走班课程表，
		goClass_table_show:function(){
			fnAjax.method_4(
				url_join("schedule-v2/show"), 
				{
					gid:$("#goClass_grade").val(),
					classroom_id:$("#classroom").val(),
				},
				"post",
				function(data) {
					console.log("查询走班课程表的数据",data);
					$(".td-goClass").html("");
					//数据库已经保存了,查看加载非走班表						
					if(data.data.length > 0){
						//查询走班课程表回显数据
						$.goClass_back_data(data.data,$(".td-goClass"));
					}
					else{
//						layer.alert("课程表暂未生成");
					}
					
				}
			);
		},
		//查询走班课程表回显数据
		goClass_back_data:function(data,container){
			$.each(data, function(i,v) {
				container.each(function(k){
					if($(this).attr("data-day") == v.day && $(this).attr("data-node") == v.class_hour){
						if(v.class_group_id != 0 && v.staff_id != 0){
							$(this).html($.classGroup_backName(v.class_group_id,aClassGroup) + $.staff_backName(v.staff_id,aStaff));
						}
					}
				});
			});
		},
		//查询非走班课程表回显数据
		noGoClass_back_data:function(data,container){
			$.each(data, function(i,v) {
				container.each(function(k){
					if($(this).attr("data-week") == v.day && $(this).attr("data-node") == v.class_hour && $(this).attr("data-class-id") == v.classes_id){
//						if(v.class_group_id != 0 && v.staff_id != 0){
							$(this).html($.classGroup_backName(v.class_group_id,aClassGroup));
//						}
					}
				});
			});
		},
		//根据id返回科组的文本字段
		classGroup_backName:function(nId,aClassGroup){
			if(nId == 0){
				return '<span class="label label-danger label-classGroup mg-5">未选择科目</span>';
			}
			var backName = "";			
			for(var k in aClassGroup){
				if(nId == aClassGroup[k].id){
					backName = '<span class="label label-primary label-classGroup mg-5">'+ aClassGroup[k].name +'</span>';
				}
			}
			return backName;
		},
		//根据id返回教职工的文本字段
		staff_backName:function(nId,aStaff){
			if(nId == 0){
				return '<span class="label label-danger label-staff mg-5">未选择教职工</span>';
			}
			var backName = "";			
			for(var k in aStaff){
				if(nId == aStaff[k].id){
					backName = '<span class="label label-info label-staff mg-5">'+ aStaff[k].username +'</span>';
				}
			}
			return backName;
		},
		//非走班，重新定义周和节之间的关系
		noGoClass_node:function(num){
			
			var totalNode = num * 5;
			var ths = "";
			for(var i = 1; i <= totalNode; i++) {
				ths += '<th class="week-node" data-node="' + resetNum(i) + '" data-week="' + Math.ceil(i / num) + '" style="min-width:90px;">' + resetNum(i) + '节</th>';
			}
			$(".node-tr").append($(ths));

			function resetNum(n) {
				if(n > num) {
					if(Math.ceil(n % num) == 0) {
						return num;
					}
					return Math.ceil(n % num);
				} else {
					return n;
				}
			}
			$("#noGoClass_table .week-th").attr("colspan",num);
			
			//获取班级列表
			$.getClassList();
			
//			//渲染非走班的表格架构（班级）
//			$.noGoClass_createClassTable(aClass,$("#noGoClass_table"));
		},
		/*
		 渲染表格班级行列（非走班）
		 @param {array} aClassGroup 班级数组
		 @param {object} container 课程表的table DOM对象 jq
		 * */
		noGoClass_createClassTable: function(aClassGroup, container) {
			container.find("tbody tr").remove();
			//班级的长度
			var tbody_tr_length = aClassGroup.length;
			//科目的行个数
			var tbody_td_length = ($("#noGoClass_table .node-tr th").length) - 1;
			var tds = ""
			for(var j = 0; j < tbody_td_length; j++) {
				tds += '<td class="noGoClass_td"></td>';
			}

			var trs = "";
			for(var i = 0; i < tbody_tr_length; i++) {
				trs += '<tr class="text-c"><td class="class-td" data-id="' + aClassGroup[i].id + '">' +
						aClassGroup[i].name +
						'班</td>' +
						tds + '</tr>';
			}
			container.find("tbody").html(trs);
			//配置非走班单元格属性
			$.noGoClass_addProp();
		},
		//配置非走班单元格属性
		noGoClass_addProp:function(){
			$(".noGoClass_td").each(function() {
				$(this).attr({
					"data-week": $("#noGoClass_table .node-tr th").eq($(this).index()).attr("data-week"), //周几标示
					"data-node": $("#noGoClass_table .node-tr th").eq($(this).index()).attr("data-node"), //节课时标示
					"data-class-id": $(this).siblings(".class-td").attr("data-id") //班级id
				});
			});
			
			//查询非走班课程表
			$.noGoClass_table_show();
		},
		//查询非走班课程表
		noGoClass_table_show:function(){
			fnAjax.method_4(
				url_join("schedule-v1/show"), 
				{
					gid:$("#noGoClass_grade").val()	
				},
				"post",
				function(data) {
					console.log("查询非走班课程表的数据",data);
					$(".noGoClass_td").html("");
					//数据库已经保存了,查看加载非走班表						
					if(data.data.length > 0){
						//查询走班课程表回显数据
						$.noGoClass_back_data(data.data,$(".noGoClass_td"));
					}
					console.log(nClassHour);
					$("#noGoClass_table").table_fold({
						node_number:(nClassHour-1),//课时总共几节
					});
					
				}
			);
		},
		//监听非走班年级切换事件
		noGoClass_event_grade:function(){
			$("#noGoClass_grade").on("change",function(){
				//获取班级列表
				$.getClassList();
//				//渲染非走班的表格架构（班级）
//				$.noGoClass_createClassTable(aClass,$("#noGoClass_table"));
//				
////				//查询非走班课程表
//				$.noGoClass_table_show();
			});
		}
	});
	
	/**
	 * 复杂表格折叠插件
	 * @param {Object} options 插件传递参数
	 * @prop {string} th_node_selector 课时th
	 * @prop {string} th_day_selector 天th
	 * @prop {string} td_classGroup_selector 科目td
	 * @prop {number} node_number 课时个数
	 * */
	$.fn.table_fold = function(options) {
		var defaults = {
			th_node_selector:".week-node",//”课时“单元格子th选择器
			th_day_selector:".week-th",//”天“单元格th选择器
			td_classGroup_selector:".noGoClass_td",//科目单元格td选择器
			node_number:9,//课时总共几节
		};
		var opts = $.extend({}, defaults, options);
		var obj = $(this);
		var sNode = (opts.node_number + 1) + "";
		$(".week-node").each(function(){
			if($(this).attr("data-node") == sNode){
				$(this).html('<a href="javascript:;" class="btn-table-detail">详情</a>').addClass("btn-details");
			}
		});
		obj.find(opts.th_day_selector).each(function(){
			if($(this).attr("data-week") != "1"){
				$(this).attr("colspan",1);
			}else{
				$(this).attr("colspan",opts.node_number);
			}
		});
		obj.find(opts.th_node_selector + "," + opts.td_classGroup_selector).each(function(){
			if($(this).attr("data-week") != 1 && $(this).attr("data-node") != sNode){
				$(this).addClass("hide");
			}
			if($(this).attr("data-week") == 1 && $(this).attr("data-node") == sNode){
				$(this).addClass("hide");
			}
		});
		//监听切换
		$("body").on("click",".btn-table-detail",function(){
			var dataWeek = $(this).parent().attr("data-week");
			//渲染天的单元格
			$(opts.th_day_selector).each(function(){
				if($(this).attr("data-week") == dataWeek){
					$(this).attr("colspan",opts.node_number);
				}else{
					$(this).attr("colspan","1");
				}
			});
			
			//渲染课时单元
			$(opts.th_node_selector).each(function(){
				if($(this).attr("data-week") == dataWeek){
					$(this).removeClass("hide");
				}
				else if($(this).attr("data-week") != dataWeek  && $(this).attr("data-node") != sNode){
					$(this).addClass("hide");
				}
				else if($(this).attr("data-week") != dataWeek  && $(this).attr("data-node") == sNode){
					$(this).removeClass("hide");
				}
			});
			
			
			//渲染科目单元
			$(opts.td_classGroup_selector).each(function(){
				if($(this).attr("data-week") == dataWeek && $(this).attr("data-node") != sNode){
					$(this).removeClass("hide");
				}
				if($(this).attr("data-week") == dataWeek && $(this).attr("data-node") == sNode){
					$(this).addClass("hide");
				}
				if($(this).attr("data-week") != dataWeek && $(this).attr("data-node") != sNode){
					$(this).addClass("hide");
				}
				if($(this).attr("data-week") != dataWeek && $(this).attr("data-node") == sNode){
					$(this).removeClass("hide");
				}
			});
			$(this).parent().addClass("hide");
		});
	}
})(jQuery, window, document);